import { defineConfig } from 'vite'
import path from 'path'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import viteCompression from 'vite-plugin-compression'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'

function getTime() {
  const now = new Date()
  let year = now.getFullYear()
  let month = now.getMonth() + 1
  let day = now.getDate()
  let hours = now.getHours()
  let minutes = now.getMinutes()
  let seconds = now.getSeconds()

  month = month < 10 ? '0' + month : month
  day = day < 10 ? '0' + day : day
  hours = hours < 10 ? '0' + hours : hours
  minutes = minutes < 10 ? '0' + minutes : minutes
  seconds = seconds < 10 ? '0' + seconds : seconds
  return `${year}${month}${day}${hours}${minutes}${seconds}`
}
const time = getTime()

export default defineConfig(({ mode }) => {
  return {
    base: '/',
    plugins: [
      vue(),
      vueJsx(),
      // gzip压缩
      viteCompression({ verbose: true, disable: false, threshold: 10240, algorithm: 'gzip', ext: '.gz', deleteOriginFile: false }),
      // svg图标
      createSvgIconsPlugin({
        // 指定需要缓存的图标文件夹
        iconDirs: [path.resolve(process.cwd(), 'public/icons')],
        // 指定symbolId格式
        symbolId: 'icon-[name]'
      })
    ],
    // 别名
    resolve: { alias: { '@': path.resolve(__dirname, './src') } },
    // 服务器选项
    server: {
      // 端口
      host: '0.0.0.0',
      // host: 'hyjc-dev.zgs.yun',
      port: 8000,
      // 为开发服务器配置 CORS。默认启用并允许任何源
      cors: true,
      // 在开发服务器启动时自动在浏览器中打开应用程序
      open: true,
      hmr: true,
      // 代理
      proxy: {
        '/api': {
          target: 'http://127.0.0.1:2005/',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, '')
        }
      }
    },
    // 构建选项
    build: {
      // 模块预加载
      modulePreload: { polyfill: false },
      // 输出目录（根目录）
      outDir: 'dist',
      // 静态资源的存放路径（相对于outDir路径）
      assetsDir: 'statics',
      // 小于阈值的资源转base64编码，单位kb，0表示禁用
      assetsInlineLimit: 0,
      // 构建时将publicDir下所有资源复制到outDir下，默认true-->复制
      // copyPublicDir: true,
      // gip压缩大小报告，可能会影响构建性能，默认false-->禁用
      // reportCompressedSize: true,
      // 清除console和debugger
      terserOptions: {
        compress: {
          drop_console: true,
          drop_debugger: true
        }
      },
      // 打包前先清空原有打包文件
      emptyOutDir: true,
      // 混淆器，默认关闭，开启时默认Esbuild
      // minify: true
      // minify: 'terser',
      rollupOptions: {
        output: {
          // chunkFileNames: 'static/js/[name]-[hash].js',
          // entryFileNames: 'static/js/[name]-[hash].js',
          // assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
          chunkFileNames: `static/js/${time}-[name]-[hash].js`,
          entryFileNames: `static/js/${time}-[name]-[hash].js`,
          assetFileNames: `static/[ext]/${time}-[name]-[hash].[ext]`
        }
      }
    },
    // css
    css: { preprocessorOptions: { less: { modifyVars: {}, javascriptEnabled: true } } }
  }
})